# main.py
"""入口主模块"""

import sys
import os
# import signal
import argparse
import logging
# import readline
from pathlib import Path
from common import setup_logging
from executor import CommandExecutor, CommandFileReader
from sftp import BaiduPanSFTP # type: ignore

def main():
    """主程序入口"""
    # 添加项目根目录到 Python 路径
    script_dir = os.path.dirname(os.path.abspath(__file__))
    project_root = os.path.dirname(script_dir)
    sys.path.insert(0, project_root)

    # 确保配置目录存在
    config_dir = Path.home() / '.baidupan'
    if not config_dir.exists():
        config_dir.mkdir(parents=True, exist_ok=True)

    # 过滤掉空参数
    sys.argv = [arg for arg in sys.argv if arg != '']

    # 解析命令行参数
    parser = argparse.ArgumentParser(description='百度网盘SFTP命令行工具')
    parser.add_argument('-c', '--command', help='执行单条命令后退出')
    parser.add_argument('-f', '--file', help='从文件读取命令并执行')
    parser.add_argument('-v', '--version', action='version', version='百度网盘SFTP命令行工具 v1.0')
    parser.add_argument('--log-level', choices=['DEBUG', 'INFO', 'WARNING', 'ERROR'], 
                       default='INFO', help='设置日志级别')
    parser.add_argument('--continue-on-error', action='store_true', 
                       help='遇到错误时继续执行后续命令')    
    args = parser.parse_args()
    
    # 设置日志级别
    logging.getLogger().setLevel(getattr(logging, args.log_level))
    # 设置日志记录
    logger = setup_logging()
    logger.info("启动百度网盘SFTP命令行工具")

    # 如果指定了命令或命令文件，则执行命令后退出
    if args.command or args.file:
       # 启动SFTP命令行 - 非交互模式
        sftp = BaiduPanSFTP(True)
        executor = CommandExecutor(sftp, continue_on_error=args.continue_on_error)
        file_reader = CommandFileReader(executor)
        success = True
        
        # 执行单条命令
        if args.command:
            success = executor.execute(args.command) and success
        
        # 执行命令文件
        if args.file:
            file_success = file_reader.read_and_execute(args.file)
            success = file_success and success

        # # 显示执行统计
        # executor.show_stats()
                
        # 保存会话状态
        # sftp._save_session_state()
        
        # 根据执行结果退出
        exit_code = 0 if success else 1
        logger.info(f"程序退出，代码: {exit_code}")
        sys.exit(exit_code)
    else:
        # 进入交互模式
        try:
            # 启动SFTP命令行 - 交互模式
            sftp = BaiduPanSFTP()      
            sftp.cmdloop()
        except Exception as e:
            logger.error(f"交互模式运行出错: {e}")
            print(f"❌❌❌❌ 程序运行出错: {e}")
            sys.exit(1)

if __name__ == '__main__':
    main()
